home *** CD-ROM | disk | FTP | other *** search
- /*********************************************************************
- Project : GUSI - Grand Unified Socket Interface
- File : GUSI.h - Socket calls
- Author : Matthias Neeracher
- Language : MPW C/C++
-
- $Log: GUSI.h,v $
- Revision 1.2 1994/12/31 01:45:54 neeri
- Fix alignment.
-
- Revision 1.1 1994/02/25 02:56:49 neeri
- Initial revision
-
- Revision 0.15 1993/06/27 00:00:00 neeri
- f?truncate
-
- Revision 0.14 1993/06/20 00:00:00 neeri
- Changed sa_constr_ppc
-
- Revision 0.13 1993/02/14 00:00:00 neeri
- AF_PAP
-
- Revision 0.12 1992/12/08 00:00:00 neeri
- getcwd()
-
- Revision 0.11 1992/11/15 00:00:00 neeri
- remove netdb.h definitions
-
- Revision 0.10 1992/09/26 00:00:00 neeri
- Separate dirent and stat
-
- Revision 0.9 1992/09/12 00:00:00 neeri
- Hostname stuff
-
- Revision 0.8 1992/09/07 00:00:00 neeri
- readlink()
-
- Revision 0.7 1992/08/03 00:00:00 neeri
- sa_constr_ppc
-
- Revision 0.6 1992/07/21 00:00:00 neeri
- sockaddr_atlk_sym
-
- Revision 0.5 1992/06/26 00:00:00 neeri
- choose()
-
- Revision 0.4 1992/05/18 00:00:00 neeri
- PPC stuff
-
- Revision 0.3 1992/04/27 00:00:00 neeri
- getsockopt()
-
- Revision 0.2 1992/04/19 00:00:00 neeri
- C++ compatibility
-
- Revision 0.1 1992/04/17 00:00:00 neeri
- bzero()
-
- *********************************************************************/
-
- #ifndef _GUSI_
- #define _GUSI_
-
- #include <sys/types.h>
-
- /* Feel free to increase FD_SETSIZE as needed */
- #define GUSI_MAX_FD FD_SETSIZE
-
- #include <sys/cdefs.h>
- #include <compat.h>
- #include <sys/ioctl.h>
- #include <sys/fcntl.h>
- #include <sys/stat.h>
- #include <dirent.h>
- #include <Types.h>
- #include <Events.h>
- #include <Files.h>
- #include <AppleTalk.h>
- #include <CTBUtilities.h>
- #include <Packages.h>
- #include <PPCToolBox.h>
- #include <stdio.h>
- #include <sys/time.h>
- #include <sys/socket.h>
- #include <string.h>
- #include <netinet/in.h>
- #include <netdb.h>
- #include <sys/un.h>
- #include <unistd.h>
- #include <machine/endian.h>
-
- typedef enum spin_msg {
- SP_MISC, /* some weird thing, usually just return immediately if you get this */
- SP_SELECT, /* in a select call */
- SP_NAME, /* getting a host by name */
- SP_ADDR, /* getting a host by address */
- SP_STREAM_READ, /* Stream read call */
- SP_STREAM_WRITE, /* Stream write call */
- SP_DGRAM_READ, /* Datagram read call */
- SP_DGRAM_WRITE, /* Datagram write call */
- SP_SLEEP, /* sleeping, passes ticks left to sleep */
- SP_AUTO_SPIN /* Autospin, passes argument to SpinCursor */
- } spin_msg;
-
- typedef int (*GUSISpinFn)(spin_msg msg, long param);
- typedef void (*GUSIEvtHandler)(EventRecord * ev);
- typedef GUSIEvtHandler GUSIEvtTable[24];
-
- /*
- * Address families, defined in sys/socket.h
- *
-
- #define AF_UNSPEC 0 // unspecified
- #define AF_UNIX 1 // local to host (pipes, portals)
- #define AF_INET 2 // internetwork: UDP, TCP, etc.
- #define AF_CTB 3 // Apple Comm Toolbox (not yet supported)
- #define AF_FILE 4 // Normal File I/O (used internally)
- #define AF_PPC 5 // PPC Toolbox
- #define AF_PAP 6 // Printer Access Protocol (client only)
- #define AF_APPLETALK 16 // Apple Talk
-
- */
-
- #define ATALK_SYMADDR 272 /* Symbolic Address for AppleTalk */
-
- /*
- * Some Implementations of GUSI require you to call GUSISetup for the
- * socket families you'd like to have defined. It's a good idea to call
- * this for *all* implementations.
- *
- * GUSIDefaultSetup() will include all socket families.
- *
- * Never call any of the GUSIwithXXX routines directly.
- */
-
- __BEGIN_DECLS
- void GUSIwithAppleTalkSockets();
- void GUSIwithInternetSockets();
- void GUSIwithPAPSockets();
- void GUSIwithPPCSockets();
- void GUSIwithUnixSockets();
- void GUSIwithSIOUXSockets();
- void GUSIwithMPWSockets();
-
- void GUSISetup(void (*socketfamily)());
- void GUSIDefaultSetup();
- void GUSILoadConfiguration(Handle);
- __END_DECLS
- /*
- * Types, defined in sys/socket.h
- *
-
- #define SOCK_STREAM 1 // stream socket
- #define SOCK_DGRAM 2 // datagram socket
-
- */
-
- #if defined(powerc) || defined (__powerc)
- #pragma options align=mac68k
- #endif
-
- /*
- * Defined in sys/un.h
- *
-
- struct sockaddr_un {
- short sun_family;
- char sun_path[108];
- };
-
- */
-
- #ifndef PRAGMA_ALIGN_SUPPORTED
- #error Apple had some fun with the conditional macros again
- #endif
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=mac68k
- #endif
-
- struct sockaddr_atlk {
- short family;
- AddrBlock addr;
- };
-
- struct sockaddr_atlk_sym {
- short family;
- EntityName name;
- };
-
- struct sockaddr_ppc {
- short family;
- LocationNameRec location;
- PPCPortRec port;
- };
-
- /* Definitions for choose() */
-
- #define CHOOSE_DEFAULT 1 /* Use *name as default name */
- #define CHOOSE_NEW 2 /* Choose new entity name, not existing one */
- #define CHOOSE_DIR 4 /* Choose a directory name, not a file */
-
- typedef struct {
- short numTypes;
- SFTypeList types;
- } sa_constr_file;
-
- typedef struct {
- short numTypes;
- NLType types;
- } sa_constr_atlk;
-
- /* Definitions for sa_constr_ppc */
-
- #define PPC_CON_NEWSTYLE 0x8000 /* Required */
- #define PPC_CON_MATCH_NAME 0x0001 /* Match name */
- #define PPC_CON_MATCH_TYPE 0x0002 /* Match port type */
- #define PPC_CON_MATCH_NBP 0x0004 /* Match NBP type */
-
- typedef struct {
- short flags;
- Str32 nbpType;
- PPCPortRec match;
- } sa_constr_ppc;
-
- #if PRAGMA_ALIGN_SUPPORTED
- #pragma options align=reset
- #endif
-
- __BEGIN_DECLS
- /*
- * IO/Socket stuff, defined elsewhere (unistd.h, sys/socket.h
- *
-
- int socket(int domain, int type, short protocol);
- int bind(int s, void *name, int namelen);
- int connect(int s, void *addr, int addrlen);
- int listen(int s, int qlen);
- int accept(int s, void *addr, int *addrlen);
- int close(int s);
- int read(int s, char *buffer, unsigned buflen);
- int readv(int s, struct iovec *iov, int count);
- int recv(int s, void *buffer, int buflen, int flags);
- int recvfrom(int s, void *buffer, int buflen, int flags, void *from, int *fromlen);
- int recvmsg(int s,struct msghdr *msg,int flags);
- int write(int s, const char *buffer, unsigned buflen);
- int writev(int s, struct iovec *iov, int count);
- int send(int s, void *buffer, int buflen, int flags);
- int sendto (int s, void *buffer, int buflen, int flags, void *to, int tolen);
- int sendmsg(int s,struct msghdr *msg,int flags);
- int select(int width, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
- int getdtablesize(void);
- int getsockname(int s, void *name, int *namelen);
- int getpeername(int s, struct sockaddr *name, int *namelen);
- int shutdown(int s, int how);
- int fcntl(int s, unsigned int cmd, int arg);
- int dup(int s);
- int dup2(int s, int s1);
- int ioctl(int d, unsigned int request, long *argp);
- int getsockopt(int s, int level, int optname, char *optval, int * optlen);
- int setsockopt(int s, int level, int optname, char *optval, int optlen);
- int isatty(int);
- int remove(const char *filename);
- int rename(const char *oldname, const char *newname);
- int creat(const char*);
- int faccess(char*, unsigned int, long*);
- long lseek(int, long, int);
- int open(const char*, int);
- int unlink(char*);
- int symlink(char* linkto, char* linkname);
- int readlink(char* path, char* buf, int bufsiz);
- int truncate(char *path, long length);
- int ftruncate(int fd, long length);
- int chdir(char * path);
- int mkdir(char * path);
- int rmdir(char * path);
- char * getcwd(char * buf, int size);
- */
-
- /*
- * Defined in stdio.h
- */
-
- #ifdef __MWERKS__
- void fsetfileinfo (char *filename, unsigned long newcreator, unsigned long newtype);
- #endif
-
- void fgetfileinfo (char *filename, unsigned long * creator, unsigned long * type);
-
- #ifdef __MWERKS__
- FILE *fdopen(int fd, const char *mode);
- int fwalk(int (*func)(FILE * stream));
- #endif
-
- int choose(
- int domain,
- int type,
- char * prompt,
- void * constraint,
- int flags,
- void * name,
- int * namelen);
-
- /*
- * Hostname routines, defined in netdb.h
- *
-
- struct hostent * gethostbyname(char *name);
- struct hostent * gethostbyaddr(struct in_addr *addrP, int, int);
- int gethostname(char *machname, long buflen);
- struct servent * getservbyname (char * name, char * proto);
- struct protoent * getprotobyname(char * name);
-
- */
-
- char * inet_ntoa(struct in_addr inaddr);
- struct in_addr inet_addr(char *address);
-
- /*
- * GUSI supports a number of hooks. Every one of them has a different prototype, but needs
- * to be passed as a GUSIHook
- */
-
- typedef enum {
- GUSI_SpinHook, /* A GUSISpinFn, to be called when a call blocks */
- GUSI_ExecHook /* Boolean (*hook)(const GUSIFileRef & ref), decides if file is executable */
- } GUSIHookCode;
-
- typedef void (*GUSIHook)(void);
- void GUSISetHook(GUSIHookCode code, GUSIHook hook);
- GUSIHook GUSIGetHook(GUSIHookCode code);
-
- /*
- * What to do when a routine blocks
- */
-
- /* Defined for compatibility */
- #define GUSISetSpin(routine) GUSISetHook(GUSI_SpinHook, (GUSIHook)routine)
- #define GUSIGetSpin() (GUSISpinFn) GUSIGetHook(GUSI_SpinHook)
-
- int GUSISetEvents(GUSIEvtTable table);
- GUSIEvtHandler * GUSIGetEvents(void);
-
- extern GUSIEvtHandler GUSISIOWEvents[];
-
- #define SIGPIPE 13
- #define SIGALRM 14
-
- /*
- * BSD memory routines, defined in compat.h
- *
-
- #define index(a, b) strchr(a, b)
- #define rindex(a, b) strrchr(a, b)
- #define bzero(from, len) memset(from, 0, len)
- #define bcopy(from, to, len) memcpy(to, from, len)
- #define bcmp(s1, s2, len) memcmp(s1, s2, len)
- #define bfill(from, len, x) memset(from, x, len)
-
- */
-
- __END_DECLS
-
- #endif /* !_GUSI_ */
-